home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FM Towns: Free Software Collection 7
/
FM Towns Free Software Collection 7.iso
/
t_os
/
artemis
/
artsrc2
/
gpoint.asm
< prev
next >
Wrap
Assembly Source File
|
1993-11-30
|
2KB
|
179 lines
; 私製ライブラリ・グラフィック篇
; (c) MATSUUCHI Ryosuke in Dec,1992
;
; gpoint.asm
;
; 1992. 8. 3(Mon)
; 1992.12.28(Sun)
public gpoint,_gpoint
extrn __AddVramBase_edi :near
extrn __SetVramSeg :near
extrn __AddVramBase_ebx :near
extrn __AddVramBase_esi :near
include grplib.inc
assume cs:cseg, ds:dseg
dseg segment dword 'DATA'
col dd 0
dseg ends
cseg segment dword 'CODE'
;---------------------------------------------------------------
; _gpoint : 点の色の読み出し
; in EAX : x
; EBX : y
; out EAX : 色
;
; int gpoint(int x,int y);
;---------------------------------------------------------------
align 4
gpoint proc
push ebx
pushfd
mov eax,[esp+8+4]
mov ebx,[esp+8+8]
call _gpoint
popfd
pop ebx
ret
gpoint endp
_gpoint proc
pushad
push es
mov ecx,[_nowscrmod]
cmp ecx,3
jl #end
cmp ecx,5
jge #0
call gpoint_16
jmp #end
#0: cmp ecx,9
jge #1
call gpoint_32a
jmp #end
#1: cmp ecx,12
jge #2
call gpoint_32b
jmp #end
#2: cmp ecx,15
jge #3
call gpoint_256
jmp #end
#3: cmp ecx,19
jge #end
call gpoint_32c
#end: pop es
popad
mov eax,[col]
ret
_gpoint endp
pageadr macro
call __AddVramBase_edi
endm
gpoint_16 proc
;edi ← アドレス
mov esi,eax
and esi,0fff8h
shr esi,1
mov edi,ebx
shl edi,9
add edi,esi
pageadr
;点の色の読み出し
call __SetVramSeg
mov edx,es:[edi] ;edx ← DW データ
mov ecx,eax ;ecx ← (x % 8) * 4
and ecx,7
lea ecx,[ecx*4]
shr edx,cl ;edx のうち必要なニブルを取り出す
and edx,0fh
mov [col],edx
ret
gpoint_16 endp
gpoint_32a proc
;edi ← アドレス
mov edi,ebx
shl edi,9
add edi,eax
add edi,eax
pageadr
;点の色の読み出し
call __SetVramSeg
mov dx,es:[edi]
and edx,7fffh
mov [col],edx
ret
gpoint_32a endp
gpoint_32b proc
;edi ← アドレス
mov edi,ebx
shl edi,10
add edi,eax
add edi,eax
pageadr
;点の色の読み出し
call __SetVramSeg
mov dx,es:[edi]
and edx,7fffh
mov [col],edx
ret
gpoint_32b endp
gpoint_256 proc
;★まだ作ってないよん
ret
gpoint_256 endp
gpoint_32c proc
;edi ← アドレス
mov edi,ebx
shl edi,10
add edi,eax
add edi,eax
pageadr
;点の色の読み出し
call __SetVramSeg
mov dx,es:[edi]
and edx,7fffh
mov [col],edx
ret
gpoint_32c endp
cseg ends
end